package com.lwc.cfdns.pojo.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.lwc.cfdns.pojo.BaseEntity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import com.lwc.cfdns.pojo.dto.ValidGroup;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 用户信息表
 *
 * @TableName cfdns_system_admin
 */
@TableName(value = "cfdns_system_admin", resultMap = "systemAdminResultMap")
@Data
public class SystemAdmin extends BaseEntity implements Serializable {
    /**
     * 用户ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 用户账号
     */
    @NotBlank(message = "登录账号不能为空", groups = {ValidGroup.Create.class})
    private String userName;

    /**
     * 用户昵称
     */
    @NotBlank(message = "用户昵称不能为空", groups = {ValidGroup.Create.class})
    private String nickName;

    /**
     * 用户类型（00系统用户）
     */
    private String userType = "00";

    /**
     * 用户邮箱
     */
    private String email;

    /**
     * 手机号码
     */
    private String phonenumber;

    /**
     * 用户性别（0男 1女 2未知）
     */
    private String sex;

    /**
     * 头像地址
     */
    private String avatar;

    /**
     * 密码
     */
    @NotBlank(message = "登录密码不能为空", groups = {ValidGroup.Create.class})
    // 更新时密码为非空字符串时不进行更新此字段 https://www.baomidou.com/pages/223848/#tablefield
    @TableField(updateStrategy = FieldStrategy.NOT_EMPTY)
    @JsonIgnore // 序列化时过滤此字段
    private String password;

    /**
     * 帐号状态（0正常 1停用）
     */
    private String status;

    /**
     * 备注
     */
    private String remark;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    // 角色 一对多
    @TableField(exist = false)
    @JsonIgnore // 序列化时过滤此字段
    private List<SystemRole> roleList = new ArrayList<>();
    // 部门 一对多
    @TableField(exist = false)
    @JsonIgnore // 序列化时过滤此字段
    private List<SystemAdminDept> deptList = new ArrayList<>();
    // 岗位 一对多
    @TableField(exist = false)
    @JsonIgnore // 序列化时过滤此字段
    private List<SystemAdminStation> stationList = new ArrayList<>();
}